package server.dominio;

import java.rmi.RemoteException;
import java.util.Enumeration;
import java.util.Hashtable;

import server.persistencia.*;

public class Kenken extends TableroJuego {
	private int id;
	private Casilla[] casillas;
	private TableroJuegoDAO dao;

	public Kenken() {
		casillas = new Casilla[36];
		for (int i = 0; i < 36; i++)
			casillas[i] = new Casilla();
		this.dao = FachadaPersistencia.getTableroJuegoDAO(this);
	}

	public Kenken(String id) throws Exception {
		this();
		this.dao.getTableroJuegoByORMID(id);
	}

	public void setNumeros(String ristra) { 
		byte fila = 0, columna = -1;
		for (byte i = 0; i < ristra.length(); i++) {
			String c = "" + ristra.charAt(i);
			byte idCasilla = i;
			if (idCasilla > 0 && i % 36 == 0) {
				fila = 0;
				columna = 0;
			} else {
				columna++;
				if (columna == 6) {
					fila++;
					columna = 0;
				}
			}
			if (c.equals(" ")){
				casillas[idCasilla].setValor((byte) 0);
				casillas[idCasilla].setFila(fila);
				casillas[idCasilla].setColumna(columna);
			}
			else {
				final byte b = Byte.parseByte(c);
				casillas[idCasilla].setValor(b);
				casillas[idCasilla].setFila(fila);
				casillas[idCasilla].setColumna(columna);
			}
		}
	}

	public int getId() {
		return id;
	}

	public String toString() {
		String result = "";
		for (int i = 0; i < 36; i++) {
			result += casillas[i].toString();
		}
		return result;
	}

	public void poner(byte idCasilla, byte fila, byte columna, byte numero, String color)
			throws RemoteException {
		if (numero >= 0 && numero <= 6) {
			this.casillas[idCasilla].setFila(fila);
			this.casillas[idCasilla].setColumna(columna);
			this.casillas[idCasilla].setValor(numero);
			this.casillas[idCasilla].setColor(color);	
			update();
			//notificar();
		}
	}

	public void quitar(byte idCasilla, byte fila, byte columna)
			throws RemoteException {//HAY QUE MODIFICARLO
		this.casillas[idCasilla].setValor((byte)0);
		update();
		//notificar();
	}

	public void insert() throws Exception {
		this.dao.insert(this.toString());
	}

	private void update() throws RemoteException {
		try {
			this.dao.update();
		} catch (Exception e) {
			throw new RemoteException(e.toString());
		}
	}

	public void setId(int id) {
		this.id = id;
	}
}
